import { message } from 'antd';

interface ErrorWithMessage {
  message: string;
  code?: string | number;
  stack?: string;
}

// 统一错误信息格式
export const formatError = (error: unknown): ErrorWithMessage => {
  if (error instanceof Error) {
    return {
      message: error.message,
      stack: error.stack,
    };
  }

  if (typeof error === 'string') {
    return {
      message: error,
    };
  }

  return {
    message: '发生未知错误',
  };
};

// 全局错误处理
export const globalErrorHandler = (error: unknown) => {
  const formattedError = formatError(error);
  
  // 错误日志记录
  console.error('[Error]:', formattedError);
  
  // 用户提示
  message.error(formattedError.message);
  
  // 可以在这里添加错误上报逻辑
};

// React错误边界处理
export const errorBoundaryHandler = (error: Error) => {
  console.error('[ErrorBoundary]:', error);
  // 可以在这里添加错误上报逻辑
};

// 异步错误处理
export const asyncErrorHandler = async <T>(
  promise: Promise<T>
): Promise<[T | null, ErrorWithMessage | null]> => {
  try {
    const data = await promise;
    return [data, null];
  } catch (error) {
    const formattedError = formatError(error);
    return [null, formattedError];
  }
}; 